package Presentacion.Recursos.Tabla;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import java.util.List;

import Presentacion.Interfaz;
import Presentacion.Pantallas.DialogoGestionarPuntajeFecha;

public class MyCustomTable {

	JTable table;
	JScrollPane scrollPane;
	Interfaz padre;
	String [] headers;
	List<Integer> columnasBotones;
	List<String> tipoBotones;
	 
	public JScrollPane crearTabla(boolean alwaysVertical,String [] h, int [] noEditables, Interfaz i){
		
		padre = i;
		this.headers = h;
		columnasBotones = new ArrayList<Integer>();
		tipoBotones = new ArrayList<String>();
		//Creamos y configuramos el scrollPane
			scrollPane = new JScrollPane();
			scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
			scrollPane.setBorder(BorderFactory.createEmptyBorder());
			scrollPane.getViewport().setBackground(new Color(21,28,19));
			
			//Ponemos una imagen en el rincon entre el scroll y los headers
			JPanel pane = new JPanel();
			pane.setBackground(new Color(28,21,19));
			pane.setLayout(null);
			ImageButton ib = new ImageButton("/Imagenes/Participante/CrearEquipo/CornerTabla.png","/Imagenes/Participante/CrearEquipo/CornerTabla.png");
			ib.setBounds(0, 1, 17, 16);
			pane.add(ib);
			scrollPane.setCorner(JScrollPane.UPPER_RIGHT_CORNER,pane);
			if(alwaysVertical)
				scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
			
			//Seteamos el modelo del scrollBar
			JScrollBar sb = scrollPane.getVerticalScrollBar();
		    sb.setUI(new MyScrollbarUI());
		    
		    construirTabla(headers,noEditables);
		 
			return scrollPane;
	  }
	
	public void construirTabla(String[] headers,final int [] noEditables){
		table=new JTable(){
	        public boolean isCellEditable(int rowIndex, int colIndex) {
	        	boolean in = false;
	        	for(int i = 0 ; i < noEditables.length ; i++)
	            if(colIndex == noEditables[i])
	                in = true;
	            return in;
	        }};
	    DefaultTableModel modelo = new DefaultTableModel(null,headers);
	    table.setModel(modelo);
		table.setGridColor(new Color(28,21,19));
		table.setBackground(new Color(49,49,49));
		table.setForeground(new Color(255,255,255));
		table.setSelectionBackground(new Color(112,15,17));
		table.setSelectionForeground(new Color(255,255,255));
		for(int i = 0 ; i < headers.length; i++)
			table.getColumnModel().getColumn(i).setCellRenderer(new MyRenderer());
		JTableHeader th = table.getTableHeader();
		th.setDefaultRenderer(new HeaderRender());
		scrollPane.setViewportView(table);
	}
	
	public void agregarFila(String... row){
		
		DefaultTableModel modelo = (DefaultTableModel)table.getModel();
		Vector<String> v = new Vector<String>();
		
		for(String e : row)
			v.add(e);

		modelo.addRow(v);
	}
	
	public void imprimirFila(int nRow){
		DefaultTableModel modelo = (DefaultTableModel)table.getModel();
		System.out.print(modelo.getValueAt(nRow, 0) + " " +
				           modelo.getValueAt(nRow, 1) + " " +
				           modelo.getValueAt(nRow, 2) + " " +
				           modelo.getValueAt(nRow, 3));
	}
	
	public void setButtonColumn(String tipoBoton, int column, boolean ext){
		if(ext){
			columnasBotones.add(column);
			tipoBotones.add(tipoBoton);
		}
		if(tipoBoton.equals("Agregar")){
			table.getColumnModel().getColumn(column).setCellRenderer((TableCellRenderer) new ButtonRenderer(table,column,"/Imagenes/Participante/CrearEquipo/BotonAgregar.png","/Imagenes/Participante/CrearEquipo/BotonAgregar.png"));
			table.getColumnModel().getColumn(column).setCellEditor(new ButtonEditor(new JCheckBox(),this,"/Imagenes/Participante/CrearEquipo/BotonAgregar.png","/Imagenes/Participante/CrearEquipo/BotonAgregar.png",0));
		}
		else if(tipoBoton.equals("Quitar")){
			table.getColumnModel().getColumn(column).setCellRenderer((TableCellRenderer) new ButtonRenderer(table,column,"/Imagenes/Participante/CrearEquipo/BotonQuitar.png","/Imagenes/Participante/CrearEquipo/BotonQuitar.png"));
			table.getColumnModel().getColumn(column).setCellEditor(new ButtonEditor(new JCheckBox(),this,"/Imagenes/Participante/CrearEquipo/BotonQuitar.png","/Imagenes/Participante/CrearEquipo/BotonQuitar.png",1));
		}
		else if(tipoBoton.equals("Cambiar")){
			table.getColumnModel().getColumn(column).setCellRenderer((TableCellRenderer) new ButtonRenderer(table,column,"/Imagenes/Participante/CrearEquipo/BotonCambiar.png","/Imagenes/Participante/CrearEquipo/BotonCambiar.png"));
			table.getColumnModel().getColumn(column).setCellEditor(new ButtonEditor(new JCheckBox(),this,"/Imagenes/Participante/CrearEquipo/BotonCambiar.png","/Imagenes/Participante/CrearEquipo/BotonCambiar.png",2));
		}
		else if(tipoBoton.equals("QuitarSuplente")){
			table.getColumnModel().getColumn(column).setCellRenderer((TableCellRenderer) new ButtonRenderer(table,column,"/Imagenes/Participante/CrearEquipo/BotonQuitar.png","/Imagenes/Participante/CrearEquipo/BotonQuitar.png"));
			table.getColumnModel().getColumn(column).setCellEditor(new ButtonEditor(new JCheckBox(),this,"/Imagenes/Participante/CrearEquipo/BotonQuitar.png","/Imagenes/Participante/CrearEquipo/BotonQuitar.png",3));
		}
		else if(tipoBoton.equals("DetallesPartido")){
			table.getColumnModel().getColumn(column).setCellRenderer((TableCellRenderer) new ButtonRenderer(table,column,"/Imagenes/Periodista/BotonDetalles.png","/Imagenes/Periodista/BotonDetalles.png"));
			table.getColumnModel().getColumn(column).setCellEditor(new ButtonEditor(new JCheckBox(),this,"/Imagenes/Periodista/BotonDetalles.png","/Imagenes/Periodista/BotonDetalles.png",4));
		}
		else if(tipoBoton.equals("DetallesJugadorEquipo1")){
			table.getColumnModel().getColumn(column).setCellRenderer((TableCellRenderer) new ButtonRenderer(table,column,"/Imagenes/Periodista/BotonDetalles.png","/Imagenes/Periodista/BotonDetalles.png"));
			table.getColumnModel().getColumn(column).setCellEditor(new ButtonEditor(new JCheckBox(),this,"/Imagenes/Periodista/BotonDetalles.png","/Imagenes/Periodista/BotonDetalles.png",5));
		}
		else if(tipoBoton.equals("DetallesJugadorEquipo2")){
			table.getColumnModel().getColumn(column).setCellRenderer((TableCellRenderer) new ButtonRenderer(table,column,"/Imagenes/Periodista/BotonDetalles.png","/Imagenes/Periodista/BotonDetalles.png"));
			table.getColumnModel().getColumn(column).setCellEditor(new ButtonEditor(new JCheckBox(),this,"/Imagenes/Periodista/BotonDetalles.png","/Imagenes/Periodista/BotonDetalles.png",6));
		}
	}
	
	public JTable getTable(){
		return table;
	}
	
	
	public void limpiarTabla(){
		
		DefaultTableModel modelo= new DefaultTableModel(null,headers);
		table.setModel(modelo);
		table.setGridColor(new Color(28,21,19));
		table.setBackground(new Color(49,49,49));
		table.setForeground(new Color(255,255,255));
		table.setSelectionBackground(new Color(112,15,17));
		table.setSelectionForeground(new Color(255,255,255));
		for(int i = 0 ; i < headers.length; i++)
			table.getColumnModel().getColumn(i).setCellRenderer(new MyRenderer());
		for(int i = 0; i < columnasBotones.size() ; i++)
			setButtonColumn(tipoBotones.get(i),columnasBotones.get(i),false);
	}
	
	public void agregarJugador(int nRow){
		padre.getPce().agregarJugador(nRow);
	}
	
	public void cambiarJugador(int nRow){
		padre.getPce().cambiarTitularPorSuplente(nRow);
	}
	
	public void quitarJugadorTitular(int nRow){
		padre.getPce().quitarJugadorTitular(nRow);
	}
	
	public void quitarJugadorSuplente(int nRow){
		padre.getPce().quitarJugadorSuplente(nRow);
	}
	
	public void setHeader(String[] nuevoHeader) {
		headers = nuevoHeader;
		
	}
	public void detallePartido(int nRow){
		padre.getPgpf().detallePartido(nRow);
	}
	
	public void detalleJugadorEquipo1(int nRow){
		DialogoGestionarPuntajeFecha a = padre.getDialogoActual();
		a.mostrarDetallesJugadorEquipo1(nRow);
	}
	
	public void detalleJugadorEquipo2(int nRow){
		DialogoGestionarPuntajeFecha a = padre.getDialogoActual();
		a.mostrarDetallesJugadorEquipo2(nRow);
	}
}